WebAssembly
WebAssembly ist eine Art von Code, die in modernen Web-Browsern ausgeführt werden kann. Es handelt sich um eine Low-Level-Assembler-ähnliche Sprache mit einem kompakten Binärformat, das nahezu native Leistung bietet und Sprachen wie C/C++, C# und Rust ein Kompilationsziel bietet, sodass sie im Web laufen können. Es ist auch so konzipiert, dass es zusammen mit JavaScript ausgeführt werden kann, damit beide zusammenarbeiten können.
WebAssembly wurde entwickelt, um JavaScript zu ergänzen und daneben ausgeführt zu werden – mit den WebAssembly JavaScript-APIs können Sie WebAssembly-Module in eine JavaScript-App laden und Funktionalität zwischen beiden teilen. Dies ermöglicht es Ihnen, die Leistung und Leistung von WebAssembly sowie die Ausdruckskraft und Flexibilität von JavaScript in derselben App zu nutzen, selbst wenn Sie nicht wissen, wie man WebAssembly-Code schreibt.
WebAssembly hat große Auswirkungen auf die Web-Plattform, nicht nur, weil es einen Weg bietet, Code, der in mehreren Sprachen geschrieben wurde, mit nahezu nativer Geschwindigkeit im Web auszuführen, sondern auch, weil es ermöglicht, Client-Apps im Web auszuführen, die zuvor nicht möglich waren.
Und das Beste daran ist, dass es als Webstandard über die W3C WebAssembly Working Group und Community Group mit aktiver Teilnahme aller großen Browser-Hersteller entwickelt wird.
Leitfäden
Die WebAssembly-Leitfäden behandeln Themen wie hochrangige Konzepte, Kompilierung aus verschiedenen Sprachen, die textuelle Darstellung des Wasm-Binärformats und wie WebAssembly ausgeführt wird.
- WebAssembly-Konzepte
-
Fangen Sie an, indem Sie die hochrangigen Konzepte hinter WebAssembly lesen — was es ist, warum es so nützlich ist, wie es in die Web-Plattform (und darüber hinaus) passt und wie es genutzt wird.
- Ein neues C/C++-Modul nach WebAssembly kompilieren
-
Wenn Sie Code in C/C++ geschrieben haben, können Sie ihn mit einem Tool wie Emscripten in Wasm kompilieren. Schauen wir uns an, wie es funktioniert.
- Ein bestehendes C-Modul nach WebAssembly kompilieren
-
Ein Hauptanwendungsfall für WebAssembly besteht darin, das bestehende Ökosystem von C-Bibliotheken zu nutzen und Entwicklern zu ermöglichen, sie im Web zu verwenden.
- Von Rust zu WebAssembly kompilieren
-
Wenn Sie Rust-Code geschrieben haben, können Sie ihn in WebAssembly kompilieren! Dieses Tutorial führt Sie durch alles, was Sie wissen müssen, um ein Rust-Projekt zu Wasm zu kompilieren und in einer bestehenden Web-App zu verwenden.
- WebAssembly-Code laden und ausführen
-
Nachdem Sie ein Wasm-Modul haben, behandelt dieser Artikel, wie man es abruft, kompiliert und instanziiert und kombiniert die WebAssembly JavaScript API mit den Fetch oder XHR APIs.
- Die WebAssembly JavaScript API verwenden
-
Sobald Sie ein Wasm-Modul geladen haben, möchten Sie es nutzen. In diesem Artikel zeigen wir Ihnen, wie Sie WebAssembly über die WebAssembly JavaScript API verwenden.
- Exportierte WebAssembly-Funktionen
-
Exportierte WebAssembly-Funktionen sind die JavaScript-Reflexe der WebAssembly-Funktionen, die das Aufrufen von WebAssembly-Code aus JavaScript ermöglichen. Dieser Artikel beschreibt, was sie sind.
- Das WebAssembly-Textformat verstehen
-
Dieser Artikel erklärt das Wasm-Textformat. Dies ist die niedrigstufige textuelle Darstellung eines Wasm-Moduls, die in den Entwicklerwerkzeugen des Browsers beim Debuggen angezeigt wird.
- WebAssembly-Textformat in Wasm konvertieren
-
Dieser Artikel bietet eine Anleitung, wie man ein in Textformat geschriebenes WebAssembly-Modul in ein Wasm-Binärformat konvertiert.
API-Referenz
- WebAssembly-Befehlsreferenz
-
Referenzdokumentation mit interaktiven Beispielen für die Menge der WebAssembly-Operatoren.
- WebAssembly-JavaScript-Schnittstelle
-
Dieses Objekt fungiert als Namespace für alle WebAssembly-bezogenen Funktionen.
WebAssembly.Global()
-
Ein
WebAssembly.Global
-Objekt stellt eine globale Variableninstanz dar, die sowohl aus JavaScript zugänglich ist als auch über eine oder mehrereWebAssembly.Module
-Instanzen importierbar/exportierbar ist. Dies ermöglicht das dynamische Verknüpfen mehrerer Module. WebAssembly.Module()
-
Ein
WebAssembly.Module
-Objekt enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Workern geteilt und mehrfach instanziiert werden kann. WebAssembly.Instance()
-
Ein
WebAssembly.Instance
-Objekt ist eine zustandsbehaftete, ausführbare Instanz einesModule
.Instance
-Objekte enthalten alle exportierten WebAssembly-Funktionen, die das Aufrufen von WebAssembly-Code aus JavaScript ermöglichen. WebAssembly.compile()
-
Die
WebAssembly.compile()
-Funktion kompiliert WebAssembly-Binärcode in einWebAssembly.Module
-Objekt. WebAssembly.compileStreaming()
-
Die
WebAssembly.compileStreaming()
-Funktion kompiliert einWebAssembly.Module
direkt aus einer gestreamten Quelle. WebAssembly.instantiate()
-
Die
WebAssembly.instantiate()
-Funktion ermöglicht das Kompilieren und Instanziieren von WebAssembly-Code. WebAssembly.instantiateStreaming()
-
Die
WebAssembly.instantiateStreaming()
-Funktion ist die Haupt-API zum Kompilieren und Instanziieren von WebAssembly-Code und gibt sowohl einModule
als auch seine ersteInstance
zurück. WebAssembly.validate()
-
Die
WebAssembly.validate()
-Funktion validiert ein gegebenes typisiertes Array von WebAssembly-Binärcode. WebAssembly.Memory()
-
Ein
WebAssembly.Memory
-Objekt ist ein erweiterbarerArrayBuffer
, der die rohen Bytes des von einerInstance
zugegriffenen Speichers hält. WebAssembly.Table()
-
Ein
WebAssembly.Table
-Objekt ist ein erweiterbares typisiertes Array von undurchsichtigen Werten wie Funktionsreferenzen, auf die von einerInstance
zugegriffen wird. WebAssembly.Tag()
-
Das
WebAssembly.Tag
-Objekt definiert eine Art von WebAssembly-Ausnahme, die zu/von WebAssembly-Code geworfen werden kann. WebAssembly.Exception()
-
Das
WebAssembly.Exception
-Objekt stellt eine Laufzeitausnahme dar, die von WebAssembly zu JavaScript oder von JavaScript zu einem WebAssembly-Ausnahmebehandlung geworfen wird. WebAssembly.CompileError()
-
Erstellt ein neues
CompileError
-Objekt von WebAssembly. WebAssembly.LinkError()
-
Erstellt ein neues
LinkError
-Objekt von WebAssembly. WebAssembly.RuntimeError()
-
Erstellt ein neues
RuntimeError
-Objekt von WebAssembly.
Beispielprojekte
- WASMSobel
- Sehen Sie sich unser webassembly-examples Repo für eine Reihe anderer Beispiele an.